#ifndef _DATASTRUCT_H
#define _DATASTRUCT_H

struct VS_INPUT_VERT
{
 float3 Pos : POSITION;
};

struct VS_INPUT_VERTCOLOR
{
	float3 Pos : POSITION;
	float4 VColor: COLOR;
};


struct VS_INPUT_VERTTEX
{
 float3 Pos : POSITION;
 float2 TextureUV: TEXCOORD0;
};

struct VS_INPUT_VERTNORMTEX
{
    float3 Pos     : POSITION; // vertex position 
    float3 Normal       : NORMAL;   // this normal comes in per-vertex
    float2 TextureUV    : TEXCOORD0;// vertex texture coords 
};

struct VS_INPUT_VERTNORMTEXTANG
{
	float3 Pos     : POSITION; // vertex position 
    float3 Normal       : NORMAL;   // this normal comes in per-vertex
    float2 TextureUV    : TEXCOORD0;// vertex texture coords 
	float3 Tangent  : TANGENT; // vertex tangent
	float3 Binormal : BINORMAL; // vertex binormal
};

struct VS_OUTPUT_VERT
{
	float4 Position:SV_POSITION;
};

struct VS_OUTPUT_VERTCOLOR
{
	float4 Position : SV_POSITION;
	float4 VColor: COLOR;
};

struct VS_OUTPUT_POSTEX
{
	float4 Position:SV_POSITION;
	float2 TextureUV : TEXCOORD0;
};


struct VS_OUTPUT_POSDEPTH
{
 float4 Position : SV_POSITION;
 float Depth : TEXCOORD0;
};

struct VS_OUTPUT_POSCOLORTEX
{
    float4 Position     : SV_POSITION; // vertex position 
    float4 Diffuse      : COLOR0;      // vertex diffuse color (note that COLOR0 is clamped from 0..1)
    float2 TextureUV    : TEXCOORD0;   // vertex texture coords 
};

struct VS_OUTPUT_POSNORMTEX
{
	float4 Position     : SV_POSITION; // vertex position
	float2 TextureUV    : TEXCOORD0; //uv
	float3 PosWorld     : TEXCOORD1; //position in world
	float3 NormWorld    : TEXCOORD2; //Normal in world
};

struct VS_OUTPUT_POSNORMTEXTANG
{
	float4 Position     : SV_POSITION; // vertex position
	float2 TextureUV    : TEXCOORD0; //uv
	float3 PosWorld     : TEXCOORD1; //position in world
	float3 NormWorld    : TEXCOORD2; //Normal in world
	float3 TangWorld    : TEXCOORD3; //Tangent in world
	float3 BiNormWorld  : TEXCOORD4; //Binormal in world
};

struct VS_OUTPUT_POSNORMTEXTANG_SHDIFFUSE
{
	float4 Position     : SV_POSITION; // vertex position
	float4 Diffuse		: COLOR0;      // diffuse color of the vertex
	float2 TextureUV    : TEXCOORD0; //uv
	float3 PosWorld     : TEXCOORD1; //position in world
	float3 NormWorld    : TEXCOORD2; //Normal in world
	float3 TangWorld    : TEXCOORD3; //Tangent in world
	float3 BiNormWorld  : TEXCOORD4; //Binormal in world
};

struct VS_INPUT_SKYBOX
{
    float4 Pos : POSITION;
};

struct VS_OUTPUT_SKYBOX
{
    float4 Pos : SV_POSITION;
    float3 Tex : TEXCOORD0;
};

#endif